/////////////////////////////////////////////////////////////////////////
// $Id$
/////////////////////////////////////////////////////////////////////////
//
//   Copyright (c) 2005-2010 Stanislav Shwartsman
//          Written by Stanislav Shwartsman [sshwarts at sourceforge net]
//
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with this library; if not, write to the Free Software
//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
//
/////////////////////////////////////////////////////////////////////////

/* ************************************************************************ */
/* 3DNow! opcodes */

static BxDisasmOpcodeTable_t BxDisasm3DNowGroup[256] = {
  // 256 entries for 3DNow opcodes_by suffix
  /* 00 */ { 0, &Ia_Invalid },
  /* 01 */ { 0, &Ia_Invalid },
  /* 02 */ { 0, &Ia_Invalid },
  /* 03 */ { 0, &Ia_Invalid },
  /* 04 */ { 0, &Ia_Invalid },
  /* 05 */ { 0, &Ia_Invalid },
  /* 06 */ { 0, &Ia_Invalid },
  /* 07 */ { 0, &Ia_Invalid },
  /* 08 */ { 0, &Ia_Invalid },
  /* 09 */ { 0, &Ia_Invalid },
  /* 0A */ { 0, &Ia_Invalid },
  /* 0B */ { 0, &Ia_Invalid },
  /* 0C */ { 0, &Ia_pi2fw_Pq_Qq },
  /* 0D */ { 0, &Ia_pi2fd_Pq_Qq },
  /* 0E */ { 0, &Ia_Invalid },
  /* 0F */ { 0, &Ia_Invalid },
  /* 10 */ { 0, &Ia_Invalid },
  /* 11 */ { 0, &Ia_Invalid },
  /* 12 */ { 0, &Ia_Invalid },
  /* 13 */ { 0, &Ia_Invalid },
  /* 14 */ { 0, &Ia_Invalid },
  /* 15 */ { 0, &Ia_Invalid },
  /* 16 */ { 0, &Ia_Invalid },
  /* 17 */ { 0, &Ia_Invalid },
  /* 18 */ { 0, &Ia_Invalid },
  /* 19 */ { 0, &Ia_Invalid },
  /* 1A */ { 0, &Ia_Invalid },
  /* 1B */ { 0, &Ia_Invalid },
  /* 1C */ { 0, &Ia_pf2iw_Pq_Qq },
  /* 1D */ { 0, &Ia_pf2id_Pq_Qq },
  /* 1E */ { 0, &Ia_Invalid },
  /* 1F */ { 0, &Ia_Invalid },
  /* 20 */ { 0, &Ia_Invalid },
  /* 21 */ { 0, &Ia_Invalid },
  /* 22 */ { 0, &Ia_Invalid },
  /* 23 */ { 0, &Ia_Invalid },
  /* 24 */ { 0, &Ia_Invalid },
  /* 25 */ { 0, &Ia_Invalid },
  /* 26 */ { 0, &Ia_Invalid },
  /* 27 */ { 0, &Ia_Invalid },
  /* 28 */ { 0, &Ia_Invalid },
  /* 29 */ { 0, &Ia_Invalid },
  /* 2A */ { 0, &Ia_Invalid },
  /* 2B */ { 0, &Ia_Invalid },
  /* 2C */ { 0, &Ia_Invalid },
  /* 2D */ { 0, &Ia_Invalid },
  /* 2E */ { 0, &Ia_Invalid },
  /* 2F */ { 0, &Ia_Invalid },
  /* 30 */ { 0, &Ia_Invalid },
  /* 31 */ { 0, &Ia_Invalid },
  /* 32 */ { 0, &Ia_Invalid },
  /* 33 */ { 0, &Ia_Invalid },
  /* 34 */ { 0, &Ia_Invalid },
  /* 35 */ { 0, &Ia_Invalid },
  /* 36 */ { 0, &Ia_Invalid },
  /* 37 */ { 0, &Ia_Invalid },
  /* 38 */ { 0, &Ia_Invalid },
  /* 39 */ { 0, &Ia_Invalid },
  /* 3A */ { 0, &Ia_Invalid },
  /* 3B */ { 0, &Ia_Invalid },
  /* 3C */ { 0, &Ia_Invalid },
  /* 3D */ { 0, &Ia_Invalid },
  /* 3E */ { 0, &Ia_Invalid },
  /* 3F */ { 0, &Ia_Invalid },
  /* 40 */ { 0, &Ia_Invalid },
  /* 41 */ { 0, &Ia_Invalid },
  /* 42 */ { 0, &Ia_Invalid },
  /* 43 */ { 0, &Ia_Invalid },
  /* 44 */ { 0, &Ia_Invalid },
  /* 45 */ { 0, &Ia_Invalid },
  /* 46 */ { 0, &Ia_Invalid },
  /* 47 */ { 0, &Ia_Invalid },
  /* 48 */ { 0, &Ia_Invalid },
  /* 49 */ { 0, &Ia_Invalid },
  /* 4A */ { 0, &Ia_Invalid },
  /* 4B */ { 0, &Ia_Invalid },
  /* 4C */ { 0, &Ia_Invalid },
  /* 4D */ { 0, &Ia_Invalid },
  /* 4E */ { 0, &Ia_Invalid },
  /* 4F */ { 0, &Ia_Invalid },
  /* 50 */ { 0, &Ia_Invalid },
  /* 51 */ { 0, &Ia_Invalid },
  /* 52 */ { 0, &Ia_Invalid },
  /* 53 */ { 0, &Ia_Invalid },
  /* 54 */ { 0, &Ia_Invalid },
  /* 55 */ { 0, &Ia_Invalid },
  /* 56 */ { 0, &Ia_Invalid },
  /* 57 */ { 0, &Ia_Invalid },
  /* 58 */ { 0, &Ia_Invalid },
  /* 59 */ { 0, &Ia_Invalid },
  /* 5A */ { 0, &Ia_Invalid },
  /* 5B */ { 0, &Ia_Invalid },
  /* 5C */ { 0, &Ia_Invalid },
  /* 5D */ { 0, &Ia_Invalid },
  /* 5E */ { 0, &Ia_Invalid },
  /* 5F */ { 0, &Ia_Invalid },
  /* 60 */ { 0, &Ia_Invalid },
  /* 61 */ { 0, &Ia_Invalid },
  /* 62 */ { 0, &Ia_Invalid },
  /* 63 */ { 0, &Ia_Invalid },
  /* 64 */ { 0, &Ia_Invalid },
  /* 65 */ { 0, &Ia_Invalid },
  /* 66 */ { 0, &Ia_Invalid },
  /* 67 */ { 0, &Ia_Invalid },
  /* 68 */ { 0, &Ia_Invalid },
  /* 69 */ { 0, &Ia_Invalid },
  /* 6A */ { 0, &Ia_Invalid },
  /* 6B */ { 0, &Ia_Invalid },
  /* 6C */ { 0, &Ia_Invalid },
  /* 6D */ { 0, &Ia_Invalid },
  /* 6E */ { 0, &Ia_Invalid },
  /* 6F */ { 0, &Ia_Invalid },
  /* 70 */ { 0, &Ia_Invalid },
  /* 71 */ { 0, &Ia_Invalid },
  /* 72 */ { 0, &Ia_Invalid },
  /* 73 */ { 0, &Ia_Invalid },
  /* 74 */ { 0, &Ia_Invalid },
  /* 75 */ { 0, &Ia_Invalid },
  /* 76 */ { 0, &Ia_Invalid },
  /* 77 */ { 0, &Ia_Invalid },
  /* 78 */ { 0, &Ia_Invalid },
  /* 79 */ { 0, &Ia_Invalid },
  /* 7A */ { 0, &Ia_Invalid },
  /* 7B */ { 0, &Ia_Invalid },
  /* 7C */ { 0, &Ia_Invalid },
  /* 7D */ { 0, &Ia_Invalid },
  /* 7E */ { 0, &Ia_Invalid },
  /* 7F */ { 0, &Ia_Invalid },
  /* 80 */ { 0, &Ia_Invalid },
  /* 81 */ { 0, &Ia_Invalid },
  /* 82 */ { 0, &Ia_Invalid },
  /* 83 */ { 0, &Ia_Invalid },
  /* 84 */ { 0, &Ia_Invalid },
  /* 85 */ { 0, &Ia_Invalid },
  /* 86 */ { 0, &Ia_Invalid },
  /* 87 */ { 0, &Ia_Invalid },
  /* 88 */ { 0, &Ia_Invalid },
  /* 89 */ { 0, &Ia_Invalid },
  /* 8A */ { 0, &Ia_pfnacc_Pq_Qq },
  /* 8B */ { 0, &Ia_Invalid },
  /* 8C */ { 0, &Ia_Invalid },
  /* 8D */ { 0, &Ia_Invalid },
  /* 8E */ { 0, &Ia_pfpnacc_Pq_Qq },
  /* 8F */ { 0, &Ia_Invalid },
  /* 90 */ { 0, &Ia_pfcmpge_Pq_Qq },
  /* 91 */ { 0, &Ia_Invalid },
  /* 92 */ { 0, &Ia_Invalid },
  /* 93 */ { 0, &Ia_Invalid },
  /* 94 */ { 0, &Ia_pfmin_Pq_Qq },
  /* 95 */ { 0, &Ia_Invalid },
  /* 96 */ { 0, &Ia_pfrcp_Pq_Qq },
  /* 97 */ { 0, &Ia_pfrsqrt_Pq_Qq },
  /* 98 */ { 0, &Ia_Invalid },
  /* 99 */ { 0, &Ia_Invalid },
  /* 9A */ { 0, &Ia_pfsub_Pq_Qq },
  /* 9B */ { 0, &Ia_Invalid },
  /* 9C */ { 0, &Ia_Invalid },
  /* 9D */ { 0, &Ia_Invalid },
  /* 9E */ { 0, &Ia_pfadd_Pq_Qq },
  /* 9F */ { 0, &Ia_Invalid },
  /* A0 */ { 0, &Ia_pfcmpgt_Pq_Qq },
  /* A1 */ { 0, &Ia_Invalid },
  /* A2 */ { 0, &Ia_Invalid },
  /* A3 */ { 0, &Ia_Invalid },
  /* A4 */ { 0, &Ia_pfmax_Pq_Qq },
  /* A5 */ { 0, &Ia_Invalid },
  /* A6 */ { 0, &Ia_pfrcpit1_Pq_Qq },
  /* A7 */ { 0, &Ia_pfrsqit1_Pq_Qq },
  /* A8 */ { 0, &Ia_Invalid },
  /* A9 */ { 0, &Ia_Invalid },
  /* AA */ { 0, &Ia_pfsubr_Pq_Qq },
  /* AB */ { 0, &Ia_Invalid },
  /* AC */ { 0, &Ia_Invalid },
  /* AD */ { 0, &Ia_Invalid },
  /* AE */ { 0, &Ia_pfacc_Pq_Qq },
  /* AF */ { 0, &Ia_Invalid },
  /* B0 */ { 0, &Ia_pfcmpeq_Pq_Qq },
  /* B1 */ { 0, &Ia_Invalid },
  /* B2 */ { 0, &Ia_Invalid },
  /* B3 */ { 0, &Ia_Invalid },
  /* B4 */ { 0, &Ia_pfmul_Pq_Qq },
  /* B5 */ { 0, &Ia_Invalid },
  /* B6 */ { 0, &Ia_pfrcpit2_Pq_Qq },
  /* B7 */ { 0, &Ia_pmulhrw_Pq_Qq },
  /* B8 */ { 0, &Ia_Invalid },
  /* B9 */ { 0, &Ia_Invalid },
  /* BA */ { 0, &Ia_Invalid },
  /* BB */ { 0, &Ia_pswapd_Pq_Qq },
  /* BC */ { 0, &Ia_Invalid },
  /* BD */ { 0, &Ia_Invalid },
  /* BE */ { 0, &Ia_Invalid },
  /* BF */ { 0, &Ia_pavgb_Pq_Qq },
  /* C0 */ { 0, &Ia_Invalid },
  /* C1 */ { 0, &Ia_Invalid },
  /* C2 */ { 0, &Ia_Invalid },
  /* C3 */ { 0, &Ia_Invalid },
  /* C4 */ { 0, &Ia_Invalid },
  /* C5 */ { 0, &Ia_Invalid },
  /* C6 */ { 0, &Ia_Invalid },
  /* C7 */ { 0, &Ia_Invalid },
  /* C8 */ { 0, &Ia_Invalid },
  /* C9 */ { 0, &Ia_Invalid },
  /* CA */ { 0, &Ia_Invalid },
  /* CB */ { 0, &Ia_Invalid },
  /* CC */ { 0, &Ia_Invalid },
  /* CD */ { 0, &Ia_Invalid },
  /* CE */ { 0, &Ia_Invalid },
  /* CF */ { 0, &Ia_Invalid },
  /* D0 */ { 0, &Ia_Invalid },
  /* D1 */ { 0, &Ia_Invalid },
  /* D2 */ { 0, &Ia_Invalid },
  /* D3 */ { 0, &Ia_Invalid },
  /* D4 */ { 0, &Ia_Invalid },
  /* D5 */ { 0, &Ia_Invalid },
  /* D6 */ { 0, &Ia_Invalid },
  /* D7 */ { 0, &Ia_Invalid },
  /* D8 */ { 0, &Ia_Invalid },
  /* D9 */ { 0, &Ia_Invalid },
  /* DA */ { 0, &Ia_Invalid },
  /* DB */ { 0, &Ia_Invalid },
  /* DC */ { 0, &Ia_Invalid },
  /* DD */ { 0, &Ia_Invalid },
  /* DE */ { 0, &Ia_Invalid },
  /* DF */ { 0, &Ia_Invalid },
  /* E0 */ { 0, &Ia_Invalid },
  /* E1 */ { 0, &Ia_Invalid },
  /* E2 */ { 0, &Ia_Invalid },
  /* E3 */ { 0, &Ia_Invalid },
  /* E4 */ { 0, &Ia_Invalid },
  /* E5 */ { 0, &Ia_Invalid },
  /* E6 */ { 0, &Ia_Invalid },
  /* E7 */ { 0, &Ia_Invalid },
  /* E8 */ { 0, &Ia_Invalid },
  /* E9 */ { 0, &Ia_Invalid },
  /* EA */ { 0, &Ia_Invalid },
  /* EB */ { 0, &Ia_Invalid },
  /* EC */ { 0, &Ia_Invalid },
  /* ED */ { 0, &Ia_Invalid },
  /* EE */ { 0, &Ia_Invalid },
  /* EF */ { 0, &Ia_Invalid },
  /* F0 */ { 0, &Ia_Invalid },
  /* F1 */ { 0, &Ia_Invalid },
  /* F2 */ { 0, &Ia_Invalid },
  /* F3 */ { 0, &Ia_Invalid },
  /* F4 */ { 0, &Ia_Invalid },
  /* F5 */ { 0, &Ia_Invalid },
  /* F6 */ { 0, &Ia_Invalid },
  /* F7 */ { 0, &Ia_Invalid },
  /* F8 */ { 0, &Ia_Invalid },
  /* F9 */ { 0, &Ia_Invalid },
  /* FA */ { 0, &Ia_Invalid },
  /* FB */ { 0, &Ia_Invalid },
  /* FC */ { 0, &Ia_Invalid },
  /* FD */ { 0, &Ia_Invalid },
  /* FE */ { 0, &Ia_Invalid },
  /* FF */ { 0, &Ia_Invalid }
};

/* ************************************************************************ */
/* FPU Opcodes */

// floating point instructions when mod!=11b.
// the following tables will be accessed like groups using the nnn (reg) field of
// the modrm byte. (the first byte is D8-DF)

  // D8 (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupD8[8] = {
  /* 0 */ { 0, &Ia_fadds_Md  },
  /* 1 */ { 0, &Ia_fmuls_Md  },
  /* 2 */ { 0, &Ia_fcoms_Md  },
  /* 3 */ { 0, &Ia_fcomps_Md },
  /* 4 */ { 0, &Ia_fsubs_Md  },
  /* 5 */ { 0, &Ia_fsubrs_Md },
  /* 6 */ { 0, &Ia_fdivs_Md  },
  /* 7 */ { 0, &Ia_fdivrs_Md }
};

  // D9 (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupD9[8] = {
  /* 0 */ { 0, &Ia_flds_Md   },
  /* 1 */ { 0, &Ia_Invalid   },
  /* 2 */ { 0, &Ia_fsts_Md   },
  /* 3 */ { 0, &Ia_fstps_Md  },
  /* 4 */ { 0, &Ia_fldenv    },
  /* 5 */ { 0, &Ia_fldcw     },
  /* 6 */ { 0, &Ia_fnstenv   },
  /* 7 */ { 0, &Ia_fnstcw    }
};

  // DA (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupDA[8] = {
  /* 0 */ { 0, &Ia_fiaddl_Md  },
  /* 1 */ { 0, &Ia_fimull_Md  },
  /* 2 */ { 0, &Ia_ficoml_Md  },
  /* 3 */ { 0, &Ia_ficompl_Md },
  /* 4 */ { 0, &Ia_fisubl_Md  },
  /* 5 */ { 0, &Ia_fisubrl_Md },
  /* 6 */ { 0, &Ia_fidivl_Md  },
  /* 7 */ { 0, &Ia_fidivrl_Md }
};

  // DB (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupDB[8] = {
  /* 0 */ { 0, &Ia_fildl_Md   },
  /* 1 */ { 0, &Ia_fisttpl_Md },
  /* 2 */ { 0, &Ia_fistl_Md   },
  /* 3 */ { 0, &Ia_fistpl_Md  },
  /* 4 */ { 0, &Ia_Invalid    },
  /* 5 */ { 0, &Ia_fldt_Mt    },
  /* 6 */ { 0, &Ia_Invalid    },
  /* 7 */ { 0, &Ia_fstpt_Mt   }
};

  // DC (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupDC[8] = {
  /* 0 */ { 0, &Ia_faddl_Mq  },
  /* 1 */ { 0, &Ia_fmull_Mq  },
  /* 2 */ { 0, &Ia_fcoml_Mq  },
  /* 3 */ { 0, &Ia_fcompl_Mq },
  /* 4 */ { 0, &Ia_fsubl_Mq  },
  /* 5 */ { 0, &Ia_fsubrl_Mq },
  /* 6 */ { 0, &Ia_fdivl_Mq  },
  /* 7 */ { 0, &Ia_fdivrl_Mq }
};

  // DD (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupDD[8] = {
  /* 0 */ { 0, &Ia_fldl_Mq    },
  /* 1 */ { 0, &Ia_fisttpq_Mq },
  /* 2 */ { 0, &Ia_fstl_Mq    },
  /* 3 */ { 0, &Ia_fstpl_Mq   },
  /* 4 */ { 0, &Ia_frstor     },
  /* 5 */ { 0, &Ia_Invalid    },
  /* 6 */ { 0, &Ia_fnsave     },
  /* 7 */ { 0, &Ia_fnstsw     }
};

  // DE (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupDE[8] = {
  /* 0 */ { 0, &Ia_fiadds_Mw  },
  /* 1 */ { 0, &Ia_fimuls_Mw  },
  /* 2 */ { 0, &Ia_ficoms_Mw  },
  /* 3 */ { 0, &Ia_ficomps_Mw },
  /* 4 */ { 0, &Ia_fisubs_Mw  },
  /* 5 */ { 0, &Ia_fisubrs_Mw },
  /* 6 */ { 0, &Ia_fidivs_Mw  },
  /* 7 */ { 0, &Ia_fidivrs_Mw }
};

  // DF (modrm is outside 00h - BFh) (mod != 11)
static BxDisasmOpcodeTable_t BxDisasmFPGroupDF[8] = {
  /* 0 */ { 0, &Ia_filds_Mw   },
  /* 1 */ { 0, &Ia_fisttps_Mw },
  /* 2 */ { 0, &Ia_fists_Mw   },
  /* 3 */ { 0, &Ia_fistps_Mw  },
  /* 4 */ { 0, &Ia_fbldt_Mt   },
  /* 5 */ { 0, &Ia_fildq_Mq   },
  /* 6 */ { 0, &Ia_fbstpt_Mt  },
  /* 7 */ { 0, &Ia_fistpq_Mq  }
};

// 512 entries for second byte of floating point instructions. (when mod==11b)
static BxDisasmOpcodeTable_t BxDisasmOpcodeInfoFP[512] = {
  // D8 (modrm is outside 00h - BFh) (mod == 11)
  /* D8 C0 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C1 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C2 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C3 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C4 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C5 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C6 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C7 */ { 0, &Ia_fadd_ST0_STi  },
  /* D8 C8 */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 C9 */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 CA */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 CB */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 CC */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 CD */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 CE */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 CF */ { 0, &Ia_fmul_ST0_STi  },
  /* D8 D0 */ { 0, &Ia_fcom_STi      },
  /* D8 D1 */ { 0, &Ia_fcom_STi      },
  /* D8 D2 */ { 0, &Ia_fcom_STi      },
  /* D8 D3 */ { 0, &Ia_fcom_STi      },
  /* D8 D4 */ { 0, &Ia_fcom_STi      },
  /* D8 D5 */ { 0, &Ia_fcom_STi      },
  /* D8 D6 */ { 0, &Ia_fcom_STi      },
  /* D8 D7 */ { 0, &Ia_fcom_STi      },
  /* D8 D8 */ { 0, &Ia_fcomp_STi     },
  /* D8 D9 */ { 0, &Ia_fcomp_STi     },
  /* D8 DA */ { 0, &Ia_fcomp_STi     },
  /* D8 DB */ { 0, &Ia_fcomp_STi     },
  /* D8 DC */ { 0, &Ia_fcomp_STi     },
  /* D8 DD */ { 0, &Ia_fcomp_STi     },
  /* D8 DE */ { 0, &Ia_fcomp_STi     },
  /* D8 DF */ { 0, &Ia_fcomp_STi     },
  /* D8 E0 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E1 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E2 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E3 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E4 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E5 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E6 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E7 */ { 0, &Ia_fsub_ST0_STi  },
  /* D8 E8 */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 E9 */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 EA */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 EB */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 EC */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 ED */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 EE */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 EF */ { 0, &Ia_fsubr_ST0_STi },
  /* D8 F0 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F1 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F2 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F3 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F4 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F5 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F6 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F7 */ { 0, &Ia_fdiv_ST0_STi  },
  /* D8 F8 */ { 0, &Ia_fdivr_ST0_STi },
  /* D8 F9 */ { 0, &Ia_fdivr_ST0_STi },
  /* D8 FA */ { 0, &Ia_fdivr_ST0_STi },
  /* D8 FB */ { 0, &Ia_fdivr_ST0_STi },
  /* D8 FC */ { 0, &Ia_fdivr_ST0_STi },
  /* D8 FD */ { 0, &Ia_fdivr_ST0_STi },
  /* D8 FE */ { 0, &Ia_fdivr_ST0_STi },
  /* D8 FF */ { 0, &Ia_fdivr_ST0_STi },

  // D9 (modrm is outside 00h - BFh) (mod == 11)
  /* D9 C0 */ { 0, &Ia_fld_STi },
  /* D9 C1 */ { 0, &Ia_fld_STi },
  /* D9 C2 */ { 0, &Ia_fld_STi },
  /* D9 C3 */ { 0, &Ia_fld_STi },
  /* D9 C4 */ { 0, &Ia_fld_STi },
  /* D9 C5 */ { 0, &Ia_fld_STi },
  /* D9 C6 */ { 0, &Ia_fld_STi },
  /* D9 C7 */ { 0, &Ia_fld_STi },
  /* D9 C8 */ { 0, &Ia_fxch    },
  /* D9 C9 */ { 0, &Ia_fxch    },
  /* D9 CA */ { 0, &Ia_fxch    },
  /* D9 CB */ { 0, &Ia_fxch    },
  /* D9 CC */ { 0, &Ia_fxch    },
  /* D9 CD */ { 0, &Ia_fxch    },
  /* D9 CE */ { 0, &Ia_fxch    },
  /* D9 CF */ { 0, &Ia_fxch    },
  /* D9 D0 */ { 0, &Ia_fnop    },
  /* D9 D1 */ { 0, &Ia_Invalid },
  /* D9 D2 */ { 0, &Ia_Invalid },
  /* D9 D3 */ { 0, &Ia_Invalid },
  /* D9 D4 */ { 0, &Ia_Invalid },
  /* D9 D5 */ { 0, &Ia_Invalid },
  /* D9 D6 */ { 0, &Ia_Invalid },
  /* D9 D7 */ { 0, &Ia_Invalid },
  /* D9 D8 */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 D9 */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 DA */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 DB */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 DC */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 DD */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 DE */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 DF */ { 0, &Ia_fstp_STi }, // undocumented
  /* D9 E0 */ { 0, &Ia_fchs    },
  /* D9 E1 */ { 0, &Ia_fabs    },
  /* D9 E2 */ { 0, &Ia_Invalid },
  /* D9 E3 */ { 0, &Ia_Invalid },
  /* D9 E4 */ { 0, &Ia_ftst    },
  /* D9 E5 */ { 0, &Ia_fxam    },
  /* D9 E6 */ { 0, &Ia_Invalid },
  /* D9 E7 */ { 0, &Ia_Invalid },
  /* D9 E8 */ { 0, &Ia_fld1    },
  /* D9 E9 */ { 0, &Ia_fldl2t  },
  /* D9 EA */ { 0, &Ia_fldl2e  },
  /* D9 EB */ { 0, &Ia_fldpi   },
  /* D9 EC */ { 0, &Ia_fldlg2  },
  /* D9 ED */ { 0, &Ia_fldln2  },
  /* D9 EE */ { 0, &Ia_fldz    },
  /* D9 EF */ { 0, &Ia_Invalid },
  /* D9 F0 */ { 0, &Ia_f2xm1   },
  /* D9 F1 */ { 0, &Ia_fyl2x   },
  /* D9 F2 */ { 0, &Ia_fptan   },
  /* D9 F3 */ { 0, &Ia_fpatan  },
  /* D9 F4 */ { 0, &Ia_fxtract },
  /* D9 F5 */ { 0, &Ia_fprem1  },
  /* D9 F6 */ { 0, &Ia_fdecstp },
  /* D9 F7 */ { 0, &Ia_fincstp },
  /* D9 F8 */ { 0, &Ia_fprem   },
  /* D9 F9 */ { 0, &Ia_fyl2xp1 },
  /* D9 FA */ { 0, &Ia_fsqrt   },
  /* D9 FB */ { 0, &Ia_fsincos },
  /* D9 FC */ { 0, &Ia_frndint },
  /* D9 FD */ { 0, &Ia_fscale  },
  /* D9 FE */ { 0, &Ia_fsin    },
  /* D9 FF */ { 0, &Ia_fcos    },

  // DA (modrm is outside 00h - BFh) (mod == 11)
  /* DA C0 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C1 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C2 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C3 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C4 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C5 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C6 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C7 */ { 0, &Ia_fcmovb_ST0_STi  },
  /* DA C8 */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA C9 */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA CA */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA CB */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA CC */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA CD */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA CE */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA CF */ { 0, &Ia_fcmove_ST0_STi  },
  /* DA D0 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D1 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D2 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D3 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D4 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D5 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D6 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D7 */ { 0, &Ia_fcmovbe_ST0_STi },
  /* DA D8 */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA D9 */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA DA */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA DB */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA DC */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA DD */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA DE */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA DF */ { 0, &Ia_fcmovu_ST0_STi  },
  /* DA E0 */ { 0, &Ia_Invalid },
  /* DA E1 */ { 0, &Ia_Invalid },
  /* DA E2 */ { 0, &Ia_Invalid },
  /* DA E3 */ { 0, &Ia_Invalid },
  /* DA E4 */ { 0, &Ia_Invalid },
  /* DA E5 */ { 0, &Ia_Invalid },
  /* DA E6 */ { 0, &Ia_Invalid },
  /* DA E7 */ { 0, &Ia_Invalid },
  /* DA E8 */ { 0, &Ia_Invalid },
  /* DA E9 */ { 0, &Ia_fucompp },
  /* DA EA */ { 0, &Ia_Invalid },
  /* DA EB */ { 0, &Ia_Invalid },
  /* DA EC */ { 0, &Ia_Invalid },
  /* DA ED */ { 0, &Ia_Invalid },
  /* DA EE */ { 0, &Ia_Invalid },
  /* DA EF */ { 0, &Ia_Invalid },
  /* DA F0 */ { 0, &Ia_Invalid },
  /* DA F1 */ { 0, &Ia_Invalid },
  /* DA F2 */ { 0, &Ia_Invalid },
  /* DA F3 */ { 0, &Ia_Invalid },
  /* DA F4 */ { 0, &Ia_Invalid },
  /* DA F5 */ { 0, &Ia_Invalid },
  /* DA F6 */ { 0, &Ia_Invalid },
  /* DA F7 */ { 0, &Ia_Invalid },
  /* DA F8 */ { 0, &Ia_Invalid },
  /* DA F9 */ { 0, &Ia_Invalid },
  /* DA FA */ { 0, &Ia_Invalid },
  /* DA FB */ { 0, &Ia_Invalid },
  /* DA FC */ { 0, &Ia_Invalid },
  /* DA FD */ { 0, &Ia_Invalid },
  /* DA FE */ { 0, &Ia_Invalid },
  /* DA FF */ { 0, &Ia_Invalid },

  // DB (modrm is outside 00h - BFh) (mod == 11)
  /* DB C0 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C1 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C2 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C3 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C4 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C5 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C6 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C7 */ { 0, &Ia_fcmovnb_ST0_STi  },
  /* DB C8 */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB C9 */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB CA */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB CB */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB CC */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB CD */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB CE */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB CF */ { 0, &Ia_fcmovne_ST0_STi  },
  /* DB D0 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D1 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D2 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D3 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D4 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D5 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D6 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D7 */ { 0, &Ia_fcmovnbe_ST0_STi },
  /* DB D8 */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB D9 */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB DA */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB DB */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB DC */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB DD */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB DE */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB DF */ { 0, &Ia_fcmovnu_ST0_STi  },
  /* DB E0 */ { 0, &Ia_feni    },
  /* DB E1 */ { 0, &Ia_fdisi   },
  /* DB E2 */ { 0, &Ia_fnclex  },
  /* DB E3 */ { 0, &Ia_fninit  },
  /* DB E4 */ { 0, &Ia_fsetpm  },
  /* DB E5 */ { 0, &Ia_Invalid },
  /* DB E6 */ { 0, &Ia_Invalid },
  /* DB E7 */ { 0, &Ia_Invalid },
  /* DB E8 */ { 0, &Ia_fucomi_ST0_STi },
  /* DB E9 */ { 0, &Ia_fucomi_ST0_STi },
  /* DB EA */ { 0, &Ia_fucomi_ST0_STi },
  /* DB EB */ { 0, &Ia_fucomi_ST0_STi },
  /* DB EC */ { 0, &Ia_fucomi_ST0_STi },
  /* DB ED */ { 0, &Ia_fucomi_ST0_STi },
  /* DB EE */ { 0, &Ia_fucomi_ST0_STi },
  /* DB EF */ { 0, &Ia_fucomi_ST0_STi },
  /* DB F0 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F1 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F2 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F3 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F4 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F5 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F6 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F7 */ { 0, &Ia_fcomi_ST0_STi  },
  /* DB F8 */ { 0, &Ia_Invalid },
  /* DB F9 */ { 0, &Ia_Invalid },
  /* DB FA */ { 0, &Ia_Invalid },
  /* DB FB */ { 0, &Ia_Invalid },
  /* DB FC */ { 0, &Ia_Invalid },
  /* DB FD */ { 0, &Ia_Invalid },
  /* DB FE */ { 0, &Ia_Invalid },
  /* DB FF */ { 0, &Ia_Invalid },

  // DC (modrm is outside 00h - BFh) (mod == 11)
  /* DC C0 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C1 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C2 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C3 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C4 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C5 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C6 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C7 */ { 0, &Ia_fadd_STi_ST0 },
  /* DC C8 */ { 0, &Ia_fmul_STi_ST0 },
  /* DC C9 */ { 0, &Ia_fmul_STi_ST0 },
  /* DC CA */ { 0, &Ia_fmul_STi_ST0 },
  /* DC CB */ { 0, &Ia_fmul_STi_ST0 },
  /* DC CC */ { 0, &Ia_fmul_STi_ST0 },
  /* DC CD */ { 0, &Ia_fmul_STi_ST0 },
  /* DC CE */ { 0, &Ia_fmul_STi_ST0 },
  /* DC CF */ { 0, &Ia_fmul_STi_ST0 },
  /* DC D0 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D1 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D2 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D3 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D4 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D5 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D6 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D7 */ { 0, &Ia_fcom_STi     }, // undocumented
  /* DC D8 */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC D9 */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC DA */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC DB */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC DC */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC DD */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC DE */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC DF */ { 0, &Ia_fcomp_STi    }, // undocumented
  /* DC E0 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E1 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E2 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E3 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E4 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E5 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E6 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E7 */ { 0, &Ia_fsubr_STi_ST0 },
  /* DC E8 */ { 0, &Ia_fsub_STi_ST0  },
  /* DC E9 */ { 0, &Ia_fsub_STi_ST0  },
  /* DC EA */ { 0, &Ia_fsub_STi_ST0  },
  /* DC EB */ { 0, &Ia_fsub_STi_ST0  },
  /* DC EC */ { 0, &Ia_fsub_STi_ST0  },
  /* DC ED */ { 0, &Ia_fsub_STi_ST0  },
  /* DC EE */ { 0, &Ia_fsub_STi_ST0  },
  /* DC EF */ { 0, &Ia_fsub_STi_ST0  },
  /* DC F0 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F1 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F2 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F3 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F4 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F5 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F6 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F7 */ { 0, &Ia_fdivr_STi_ST0 },
  /* DC F8 */ { 0, &Ia_fdiv_STi_ST0  },
  /* DC F9 */ { 0, &Ia_fdiv_STi_ST0  },
  /* DC FA */ { 0, &Ia_fdiv_STi_ST0  },
  /* DC FB */ { 0, &Ia_fdiv_STi_ST0  },
  /* DC FC */ { 0, &Ia_fdiv_STi_ST0  },
  /* DC FD */ { 0, &Ia_fdiv_STi_ST0  },
  /* DC FE */ { 0, &Ia_fdiv_STi_ST0  },
  /* DC FF */ { 0, &Ia_fdiv_STi_ST0  },

  // DD (modrm is outside 00h - BFh) (mod == 11)
  /* DD C0 */ { 0, &Ia_ffree_STi },
  /* DD C1 */ { 0, &Ia_ffree_STi },
  /* DD C2 */ { 0, &Ia_ffree_STi },
  /* DD C3 */ { 0, &Ia_ffree_STi },
  /* DD C4 */ { 0, &Ia_ffree_STi },
  /* DD C5 */ { 0, &Ia_ffree_STi },
  /* DD C6 */ { 0, &Ia_ffree_STi },
  /* DD C7 */ { 0, &Ia_ffree_STi },
  /* DD C8 */ { 0, &Ia_fxch      }, // undocumented
  /* DD C9 */ { 0, &Ia_fxch      }, // undocumented
  /* DD CA */ { 0, &Ia_fxch      }, // undocumented
  /* DD CB */ { 0, &Ia_fxch      }, // undocumented
  /* DD CC */ { 0, &Ia_fxch      }, // undocumented
  /* DD CD */ { 0, &Ia_fxch      }, // undocumented
  /* DD CE */ { 0, &Ia_fxch      }, // undocumented
  /* DD CF */ { 0, &Ia_fxch      }, // undocumented
  /* DD D0 */ { 0, &Ia_fst_STi   },
  /* DD D1 */ { 0, &Ia_fst_STi   },
  /* DD D2 */ { 0, &Ia_fst_STi   },
  /* DD D3 */ { 0, &Ia_fst_STi   },
  /* DD D4 */ { 0, &Ia_fst_STi   },
  /* DD D5 */ { 0, &Ia_fst_STi   },
  /* DD D6 */ { 0, &Ia_fst_STi   },
  /* DD D7 */ { 0, &Ia_fst_STi   },
  /* DD D8 */ { 0, &Ia_fstp_STi  },
  /* DD D9 */ { 0, &Ia_fstp_STi  },
  /* DD DA */ { 0, &Ia_fstp_STi  },
  /* DD DB */ { 0, &Ia_fstp_STi  },
  /* DD DC */ { 0, &Ia_fstp_STi  },
  /* DD DD */ { 0, &Ia_fstp_STi  },
  /* DD DE */ { 0, &Ia_fstp_STi  },
  /* DD DF */ { 0, &Ia_fstp_STi  },
  /* DD E0 */ { 0, &Ia_fucom_STi },
  /* DD E1 */ { 0, &Ia_fucom_STi },
  /* DD E2 */ { 0, &Ia_fucom_STi },
  /* DD E3 */ { 0, &Ia_fucom_STi },
  /* DD E4 */ { 0, &Ia_fucom_STi },
  /* DD E5 */ { 0, &Ia_fucom_STi },
  /* DD E6 */ { 0, &Ia_fucom_STi },
  /* DD E7 */ { 0, &Ia_fucom_STi },
  /* DD E8 */ { 0, &Ia_fucomp_STi },
  /* DD E9 */ { 0, &Ia_fucomp_STi },
  /* DD EA */ { 0, &Ia_fucomp_STi },
  /* DD EB */ { 0, &Ia_fucomp_STi },
  /* DD EC */ { 0, &Ia_fucomp_STi },
  /* DD ED */ { 0, &Ia_fucomp_STi },
  /* DD EE */ { 0, &Ia_fucomp_STi },
  /* DD EF */ { 0, &Ia_fucomp_STi },
  /* DD F0 */ { 0, &Ia_Invalid },
  /* DD F1 */ { 0, &Ia_Invalid },
  /* DD F2 */ { 0, &Ia_Invalid },
  /* DD F3 */ { 0, &Ia_Invalid },
  /* DD F4 */ { 0, &Ia_Invalid },
  /* DD F5 */ { 0, &Ia_Invalid },
  /* DD F6 */ { 0, &Ia_Invalid },
  /* DD F7 */ { 0, &Ia_Invalid },
  /* DD F8 */ { 0, &Ia_Invalid },
  /* DD F9 */ { 0, &Ia_Invalid },
  /* DD FA */ { 0, &Ia_Invalid },
  /* DD FB */ { 0, &Ia_Invalid },
  /* DD FC */ { 0, &Ia_Invalid },
  /* DD FD */ { 0, &Ia_Invalid },
  /* DD FE */ { 0, &Ia_Invalid },
  /* DD FF */ { 0, &Ia_Invalid },

  // DE (modrm is outside 00h - BFh) (mod == 11)
  /* DE C0 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C1 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C2 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C3 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C4 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C5 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C6 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C7 */ { 0, &Ia_faddp_STi_ST0 },
  /* DE C8 */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE C9 */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE CA */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE CB */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE CC */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE CD */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE CE */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE CF */ { 0, &Ia_fmulp_STi_ST0 },
  /* DE D0 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D1 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D2 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D3 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D4 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D5 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D6 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D7 */ { 0, &Ia_fcomp_STi }, // undocumented
  /* DE D8 */ { 0, &Ia_Invalid },
  /* DE D9 */ { 0, &Ia_fcompp  },
  /* DE DA */ { 0, &Ia_Invalid },
  /* DE DB */ { 0, &Ia_Invalid },
  /* DE DC */ { 0, &Ia_Invalid },
  /* DE DD */ { 0, &Ia_Invalid },
  /* DE DE */ { 0, &Ia_Invalid },
  /* DE DF */ { 0, &Ia_Invalid },
  /* DE E0 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E1 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E2 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E3 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E4 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E5 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E6 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E7 */ { 0, &Ia_fsubrp_STi_ST0 },
  /* DE E8 */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE E9 */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE EA */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE EB */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE EC */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE ED */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE EE */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE EF */ { 0, &Ia_fsubp_STi_ST0  },
  /* DE F0 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F1 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F2 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F3 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F4 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F5 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F6 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F7 */ { 0, &Ia_fdivrp_STi_ST0 },
  /* DE F8 */ { 0, &Ia_fdivp_STi_ST0  },
  /* DE F9 */ { 0, &Ia_fdivp_STi_ST0  },
  /* DE FA */ { 0, &Ia_fdivp_STi_ST0  },
  /* DE FB */ { 0, &Ia_fdivp_STi_ST0  },
  /* DE FC */ { 0, &Ia_fdivp_STi_ST0  },
  /* DE FD */ { 0, &Ia_fdivp_STi_ST0  },
  /* DE FE */ { 0, &Ia_fdivp_STi_ST0  },
  /* DE FF */ { 0, &Ia_fdivp_STi_ST0  },

  // DF (modrm is outside 00h - BFh) (mod == 11)
  /* DF C0 */ { 0, &Ia_ffreep_STi }, // 287 compatibility opcode
  /* DF C1 */ { 0, &Ia_ffreep_STi },
  /* DF C2 */ { 0, &Ia_ffreep_STi },
  /* DF C3 */ { 0, &Ia_ffreep_STi },
  /* DF C4 */ { 0, &Ia_ffreep_STi },
  /* DF C5 */ { 0, &Ia_ffreep_STi },
  /* DF C6 */ { 0, &Ia_ffreep_STi },
  /* DF C7 */ { 0, &Ia_ffreep_STi },
  /* DF C8 */ { 0, &Ia_fxch     }, // undocumented
  /* DF C9 */ { 0, &Ia_fxch     }, // undocumented
  /* DF CA */ { 0, &Ia_fxch     }, // undocumented
  /* DF CB */ { 0, &Ia_fxch     }, // undocumented
  /* DF CC */ { 0, &Ia_fxch     }, // undocumented
  /* DF CD */ { 0, &Ia_fxch     }, // undocumented
  /* DF CE */ { 0, &Ia_fxch     }, // undocumented
  /* DF CF */ { 0, &Ia_fxch     }, // undocumented
  /* DF D0 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D1 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D2 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D3 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D4 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D5 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D6 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D7 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D8 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF D9 */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF DA */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF DB */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF DC */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF DD */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF DE */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF DF */ { 0, &Ia_fstp_STi }, // undocumented
  /* DF E0 */ { 0, &Ia_fnstsw_AX },
  /* DF E1 */ { 0, &Ia_Invalid },
  /* DF E2 */ { 0, &Ia_Invalid },
  /* DF E3 */ { 0, &Ia_Invalid },
  /* DF E4 */ { 0, &Ia_Invalid },
  /* DF E5 */ { 0, &Ia_Invalid },
  /* DF E6 */ { 0, &Ia_Invalid },
  /* DF E7 */ { 0, &Ia_Invalid },
  /* DF E8 */ { 0, &Ia_fucomip_ST0_STi },
  /* DF E9 */ { 0, &Ia_fucomip_ST0_STi },
  /* DF EA */ { 0, &Ia_fucomip_ST0_STi },
  /* DF EB */ { 0, &Ia_fucomip_ST0_STi },
  /* DF EC */ { 0, &Ia_fucomip_ST0_STi },
  /* DF ED */ { 0, &Ia_fucomip_ST0_STi },
  /* DF EE */ { 0, &Ia_fucomip_ST0_STi },
  /* DF EF */ { 0, &Ia_fucomip_ST0_STi },
  /* DF F0 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F1 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F2 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F3 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F4 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F5 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F6 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F7 */ { 0, &Ia_fcomip_ST0_STi  },
  /* DF F8 */ { 0, &Ia_Invalid },
  /* DF F9 */ { 0, &Ia_Invalid },
  /* DF FA */ { 0, &Ia_Invalid },
  /* DF FB */ { 0, &Ia_Invalid },
  /* DF FC */ { 0, &Ia_Invalid },
  /* DF FD */ { 0, &Ia_Invalid },
  /* DF FE */ { 0, &Ia_Invalid },
  /* DF FF */ { 0, &Ia_Invalid },
};
